package com.grape.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.grape.dto.PermissionDTO;
import com.grape.vo.BaseVo;
import com.grape.entity.SysPermission;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 *
 * 权限表 服务类
 *
 * @author  putao
 * @email   2628279194@qq.com
 */
public interface ISysPermissionService extends IService<SysPermission>, BaseService<SysPermission> {

    /**
     * 分页
     * @param baseVo    统一分页对象
     * @return          权限表集合
     */
    List<SysPermission> listData(BaseVo baseVo);

    /**
     * 修改
     * @param sysPermission 权限表对象
     */
    void updateData(SysPermission sysPermission);

    /**
     * 新增
     * @param sysPermission 权限表对象
     * @return              权限表对象
     */
    SysPermission insertData(SysPermission sysPermission);

    /**
     * 删除
     * @param id    单据id
     * @return      删除条数
     */
    int deleteData(String id);

    /**
     * 根据id查询详情
     * @param id    权限id
     * @return      权限对象
     */
     SysPermission detail(String id);

    /**
     * 根据角色集合查询权限集合
     * @param roleNameList  角色名称集合
     * @return              权限集合
     */
    List<SysPermission> selectByRoleName(List<String> roleNameList);

    /**
     * 根据用户id查询权限列表
     * @param userId    用户id
     * @return          权限列表
     */
    List<SysPermission> selectByUserId(String userId);

    /**
     * 根据角色id查询权限和全部权限
     * @param roleId                角色id
     * @param allPermissionList     全部权限
     * @return                      权限集合
     */
    List<SysPermission> selectByRoleId(String roleId, List<SysPermission> allPermissionList) throws ExecutionException, InterruptedException;

    /**
     * 查询全部用户权限
     * @return      权限集合
     */
    List<PermissionDTO> listAllUserPermission();

    /**
     * 根据用户id刷新redis权限
     * @param userId    用户id
     * @return          刷新结果
     */
    boolean refreshPermissionByUserId(String userId);

    /**
     * 根据用户id刷新redis权限
     * @param userIdList    用户id集合
     * @return              刷新结果
     */
    boolean refreshPermissionByUserIdList(List<String> userIdList);
}

